package attribute;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-10-13
 * Time: 15:17
 */

public class Demo2 {

    //手动设置一个表示位
    private static boolean isQUit = false;

    public static void main1(String[] args) throws InterruptedException {
        //thread中的一些重要方法
        //start 在系统内部创建线程
        //run  单纯的普通方法 表述了任务的内容

        //中断线程 让线程停下来 ,线程停下来的关键是对应线程的run方法跑完了
        //1)可以手动设置一个标志位Boolean 来控制是否要执行
        Thread t = new Thread(() -> {
            while (!isQUit){
                System.out.println("hello");
            }
        });
        t.start();

        //在main线程中 控制这个标志位
        //因为多个线程公用一块虚拟地址空间 main修改的和t读取的是同一个isQuit
        Thread.sleep(5000);
        isQUit = true;
    }


    //更好的做法是 使用Thread内中的一个标志位 来进行判定
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(() -> {
            while (!Thread.currentThread().isInterrupted()){
                System.out.println("Java");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    break;
                }
            }
        });
        t.start();


        Thread.sleep(5000);
        t.interrupt();
        //调用这个方法 如果t线程处于就绪状态 那么就将表示为设为true
        //如果t线程处于阻塞状态（sleep休眠了），就会触发一个InterruptException异常

    }
}
